package com.meihua.baoleyi.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by liming on 2017/10/18
 */

public class MyDateUtils {

    private static MyDateUtils util;
    private SimpleDateFormat dateYYYYMM = new SimpleDateFormat("yyyy-MM");
    private SimpleDateFormat dateYYYYMMDD = new SimpleDateFormat("yyyy-MM-dd");
    private SimpleDateFormat dateYYYY_MM_DD = new SimpleDateFormat("yyyy/MM/dd");
    private SimpleDateFormat timeHHmm = new SimpleDateFormat("HH:mm");
    private SimpleDateFormat dateMMDDHHMM = new SimpleDateFormat("MM-dd HH:mm");

    private MyDateUtils() {
    }

    public static MyDateUtils getInstance() {
        if (util == null) {
            util = new MyDateUtils();
        }
        return util;
    }

    /**
     * 获取时间2017-9格式的
     *
     * @param s
     * @return
     */
    public String stampToDate(String s) {
        try {
            long temp = Long.parseLong(s);
            Date date = new Date(temp * 1000);
            return dateYYYYMM.format(date);
        } catch (NumberFormatException e) {
            e.printStackTrace();
            return s == null ? "" : s;
        }
    }


    /**
     * 后台返回的时间戳（秒）转换为yyyy-MM-dd
     *
     * @param s 后台数据
     * @return
     */
    public String stampToDate2(String s) {
        try {
            long temp = Long.parseLong(s);
            Date date = new Date(temp * 1000);
            return dateYYYYMMDD.format(date);
        } catch (NumberFormatException e) {
            e.printStackTrace();
            return s == null ? "" : s;
        }
    }


    /**
     * 后台返回的时间戳（秒）转换为yyyy-MM-dd
     *
     * @param s 后台数据
     * @return
     */
    public String stampToDate3(String s) {
        try {
            long temp = Long.parseLong(s);
            Date date = new Date(temp * 1000);
            return timeHHmm.format(date);
        } catch (NumberFormatException e) {
            e.printStackTrace();
            return s == null ? "" : s;
        }
    }

    /**
     * 后台返回的时间戳（秒）转换为yyyy-MM-dd
     *
     * @param s 后台数据
     * @return
     */
    public String stampToDate4(String s) {
        try {
            long temp = Long.parseLong(s);
            Date date = new Date(temp * 1000);
            return dateYYYY_MM_DD.format(date);
        } catch (NumberFormatException e) {
            e.printStackTrace();
            return s == null ? "" : s;
        }
    }

    /**
     * 后台返回的时间戳（秒）转换为MM-dd HH:mm
     *
     * @param s 后台数据
     * @return
     */
    public String stampToDate5(String s) {
        try {
            long temp = Long.parseLong(s);
            Date date = new Date(temp * 1000);
            return dateMMDDHHMM.format(date);
        } catch (NumberFormatException e) {
            e.printStackTrace();
            return s == null ? "" : s;
        }
    }


    /**
     * 獲取帶（今天，昨天）字樣的列表顯示字符串
     *
     * @param time 格式化好的一個時間字符串（yyyy-MM-dd）
     * @return
     */
    public String getTime(String time) {
        String times = MyDateUtils.getInstance().stampToDate2(time);
        Date d = new Date();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        if (sf.format(d).equals(times)) {
            return "今天";
        } else if (sf.format(new Date(d.getTime() - 1000 * 60 * 60 * 24)).equals(times)) {
            return "昨天";
        } else {
            return times;
        }
    }

    /**
     * 获取时间，返回本月，上月等字段
     *
     * @param time
     * @return
     */
    public String getTimeData(String time) {
        String times = MyDateUtils.getInstance().stampToDate(time);
        Date d = new Date();
        if (d.getYear() == getDateForStr(time).getYear()) {
            if (d.getMonth() == getDateForStr(time).getMonth()) {
                return "本月";
            } else if (d.getMonth() == getDateForStr(time).getMonth() + 1) {
                return "上月";
            } else {
                return times;
            }
        } else {
            return times;
        }
    }

    /**
     * 字符串格式的时间转换成时间戳
     *
     * @param time 格式化好的一個時間字符串（yyyy-MM）
     * @return 时间戳
     */
    public long date2UnixTimestamp(String time) {
        try {
            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM");
            Date d = sf.parse(time);
            return d.getTime() / 1000L;
        } catch (ParseException e) {
            e.printStackTrace();
            return 0L;
        }
    }

    /**
     * 字符串格式的时间转换成时间戳
     *
     * @param time 格式化好的一個時間字符串（yyyy-MM）
     * @return 时间戳
     */
    public long date2UnixTimestamp2(String time) {
        try {
            SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
            Date d = sf.parse(time);
            return d.getTime() / 1000L;
        } catch (ParseException e) {
            e.printStackTrace();
            return 0L;
        }
    }

    /**
     * 根據秒數去獲取時間
     *
     * @param time
     * @return
     */
    private Date getDateForStr(String time) {
        /*if (StringUtil.isAllNum(time)) {
            long temp = Long.valueOf(time);
            return new Date(temp * 1000);
        } else {
            return new Date(time);
        }*/
        try {
            long temp = Long.parseLong(time);
            return new Date(temp * 1000);
        } catch (NumberFormatException e) {
            e.printStackTrace();
            return new Date();
        }

    }
}


